iT邦幫忙

2026 iThome 鐵人賽

DAY 25
0
Modern Web

教練看不到的那六天|從 FIT 檔到 3D 軌跡,馬拉松訓練資料 Dashboard系列 第 25

Day 25|配速計算機:工程師和生理學家的對話

  • 分享至 

  • xImage
  •  

Day 15 用教練的配速表判過達成率—四區是 1:36/400m,跑進 1:34.0–1:38.0 就算達標。

那張表是教練提供,但如果沒有表呢?能不能從一場成績反推出訓練配速?

今天想做這個嘗試,而做完發現,這種計算機最容易誤會的地方不是公式,是它與實際的差距。

https://ithelp.ithome.com.tw/upload/images/20260910/20183598oLBzA9B8ku.jpg


兩個方式,兩種來歷

跑步圈算等效成績有兩套主流方法,出發點完全不同。

Riegel(1977) 是一條冪次律:

T₂ = T₁ × (D₂ / D₁)^1.06

Pete Riegel 是一位工程師,他統計了大量比賽成績,發現距離加倍時完賽時間大約變成 2^1.06 倍,這是從資料歸納出來的。

那個 1.06 就是全部的祕密,適用範圍是 3.5 到 230 分鐘。

Daniels-Gilbert VDOT(1979) 走另一條路—從生理模型出發:

VO₂     = −4.60 + 0.182258·v + 0.000104·v²          (v = 公尺/分)
%VO₂max = 0.8 + 0.1894393·e^(−0.012778·t)
             + 0.2989558·e^(−0.1932605·t)           (t = 分鐘)

第一條算「跑這個速度要耗多少氧」,第二條算「這個時長能維持最大攝氧的百分之幾」,兩個一除,得到 VDOT。

Jack Daniels 是運動生理學家,這兩條式子來自實驗室的跑步機測試。


實作

Riegel 一行:

export const riegel = (t1: number, d1: number, d2: number) =>
  t1 * Math.pow(d2 / d1, RIEGEL_EXP);

VDOT 要多幾行,而且反推沒有解析解—給定 VDOT 求成績只能逼近:

/** 由 VDOT 反推某距離的成績。沒有解析解,用二分逼近。 */
export function timeFromVdot(v: number, d: number): number {
  let lo = 60, hi = 6 * 3600;
  for (let i = 0; i < 60; i++) {
    const mid = (lo + hi) / 2;
    // 時間越長 VDOT 越低,所以算出來比目標高就要往「更慢」找
    if (vdot(mid, d) > v) lo = mid; else hi = mid;
  }
  return (lo + hi) / 2;
}

六十次二分,精度到毫秒以下。


那兩套差多少

這是我做完最想知道的,用一個 VDOT 47.3 的人(東京馬 3:22:07)去換算,十二組配對:

來源 → 目標 VDOT Riegel
半馬 → 5K 20:55 20:53 +2s
全馬 → 10K 43:52 43:56 −5s
10K → 5K 20:55 20:48 +7s
5K → 半馬 1:36:05 1:36:13 −8s
半馬 → 10K 43:22 43:33 −11s
全馬 → 半馬 1:37:11 1:36:56 +15s
10K → 全馬 3:19:54 3:19:30 +24s
半馬 → 全馬 3:19:54 3:20:20 −26s
5K → 全馬 3:19:54 3:20:37 −43s

最大差 43 秒,佔一場 3 小時 20 分的 0.36%。

而且規律很清楚:跨越的距離差越大,分歧越大。 相鄰距離之間都在 15 秒內,5K → 全馬 跨了八倍才差 43 秒。


那為什麼還要兩套都給

差 43 秒的話,選一個不就好了?

但從實驗精神出發,我們兩個公式都加入計算作為參考,

所以計算機把兩欄並排,差超過一分鐘標黃:

| 距離 | VDOT | Riegel | 差 |

六場的 VDOT

順手把六場全馬都算了一次:

賽事 完賽 VDOT
東京馬 3:22:07 47.3
臺北馬 24 3:28:41 45.4
臺北馬 25 3:30:40 44.7
國道馬 3:34:39 43.6
福岡馬 3:37:24 43.3
台東 CT 3:56:54 38.3

最好和最差差了 9 個 VDOT。

而 Day 22 已經知道台東那場的問題不是體能—那天氣溫 24.4 度,同樣的配速前半心率就比福岡高 15 下。

所以「用單場成績算 VDOT」有個沒寫在公式裡的前提:那場要正常 ,拿台東那場去推訓練配速,會得到一組太慢的數字。


這頁不預測臺北馬

12/20 是這個系列從第一天就在講的目標賽事,計算機算得出來一個數字,但這邊沒有把它放上去。

Day 19 才剛寫了一條規則,禁止 AI 助教做成績預測

而且理由是同一個:

這裡算的是「等效」不是「預測」。
等效講的是「同樣的體能換算到別的距離會是多少」;預測講的是「那天你會跑多少」。
後者要考慮天氣、狀態、賽道 — 這個計算機一個都不知道,
而六場全馬裡光是氣溫就從 12.2° 到 24.4°。


還有一件事:這不是教練那張表

計算機吐出五個訓練區間(E/M/T/I/R,Daniels 的分法),而跑班用的是六區的 1A / 1B 表。

兩套不一樣,而且不能互換。

這是 Daniels 的五區,跟跑班的 1A / 1B 六區不是同一套。
跑班那兩張表是教練給的,這裡是從成績反推的 — 兩者可以對照,但不能互換。

這句也印在畫面上提醒,因為一個計算機給你一組配速,很容易就被當成「該練的配速」—而該練什麼應該和教練討論來決定,而不是公式。


明天

工具做好了,明天要拿它去和 Garmin 對答案!



上一篇
Day 24|讓馬拉松再次起跑:賽事回放器
系列文
教練看不到的那六天|從 FIT 檔到 3D 軌跡,馬拉松訓練資料 Dashboard25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言